package bdsimple.impl.mysql;

import java.sql.ResultSet;

import bdsimple.dao.base.CiudadDAO;
import bdsimple.dao.base.ItemDAO;
import bdsimple.dao.base.PrecioItemCiudadDAO;
import bdsimple.dto.base.CiudadDTO;
import bdsimple.dto.base.ItemDTO;
import bdsimple.dto.base.PrecioItemCiudadDTO;
import bdsimple.abstractfactory.AbstractFactoryDAO;
import dao.base.api.IDTO;
import dao.base.impl.Reference;

public class PrecioItemCiudadDAOImpl extends MySQLBaseDAO implements PrecioItemCiudadDAO {

	public PrecioItemCiudadDAOImpl() {
		super(PrecioItemCiudadDTO.class);
	}
	
	@Override
	protected String createInsertCollst(IDTO dto) throws Exception {

		StringBuffer strbuf = new StringBuffer();

		strbuf.append(PrecioItemCiudadDTOImpl.PRECIO);
		strbuf.append(", ");
		strbuf.append(PrecioItemCiudadDTOImpl.ITEM_REFERENCIA);
		strbuf.append(", ");
		strbuf.append(PrecioItemCiudadDTOImpl.CIUDAD_REFERENCIA);
		
		return strbuf.toString();
		
	}

	@Override
	protected String createInsertValues(IDTO dto) throws Exception {

		PrecioItemCiudadDTOImpl precioItemCiudadDTOImpl = (PrecioItemCiudadDTOImpl) dto;

	    StringBuffer strbuf = new StringBuffer();

	    strbuf.append(precioItemCiudadDTOImpl.getPrecio());
	    strbuf.append(", ");

	    Reference<CiudadDTO> refCiudad = precioItemCiudadDTOImpl.getCiudadDTORef();
	    refCiudad.checkInsert();
	    strbuf.append(refCiudad.getIdAsString());
	    
	    strbuf.append(", ");
	    
	    Reference<ItemDTO> refItem = precioItemCiudadDTOImpl.getItemDTORef();
	    refItem.checkInsert();
	    strbuf.append(refItem.getIdAsString());

	    return strbuf.toString();
	}
	
	@Override
	protected String createTableColumns() throws Exception {

		ItemDAO itemDAO = (ItemDAO)//
		AbstractFactoryDAO.getFactoryDAO().getDAO(//
				ItemDAO.class, connectionBean);
		
		CiudadDAO ciudadDAO = (CiudadDAO)//
		AbstractFactoryDAO.getFactoryDAO().getDAO(//
				CiudadDAO.class, connectionBean);

		StringBuffer strbuf = new StringBuffer();
		
		strbuf.append(PrecioItemCiudadDTOImpl.ID);
	    strbuf.append(" INT PRIMARY KEY AUTO_INCREMENT, ");
	    strbuf.append(PrecioItemCiudadDTOImpl.PRECIO);
	    strbuf.append(" INT, ");
	    strbuf.append(PrecioItemCiudadDTOImpl.ITEM_REFERENCIA);
	    strbuf.append(" INT REFERENCES ");
	    strbuf.append(itemDAO.getTableName());
	    strbuf.append(", ");
	    strbuf.append(PrecioItemCiudadDTOImpl.CIUDAD_REFERENCIA);
	    strbuf.append(" INT REFERENCES ");
	    strbuf.append(ciudadDAO.getTableName());
	    
	    return strbuf.toString();
	
	}

	@Override
	protected String createUpdateValues(IDTO dto) throws Exception {
		
		PrecioItemCiudadDTOImpl precioItemCiudadDTOImpl = (PrecioItemCiudadDTOImpl) dto;
		
		StringBuffer strbuf = new StringBuffer();

		strbuf.append(PrecioItemCiudadDTOImpl.PRECIO);
		strbuf.append(" = ");
		strbuf.append(precioItemCiudadDTOImpl.getPrecio());

		strbuf.append(", ");
		
		strbuf.append(PrecioItemCiudadDTOImpl.ITEM_REFERENCIA);
		strbuf.append(" = ");
		
		Reference<CiudadDTO> refCiudad = precioItemCiudadDTOImpl.getCiudadDTORef();
	    refCiudad.checkInsert();
	    strbuf.append(refCiudad.getIdAsString());
		
		strbuf.append(", ");
		
		strbuf.append(PrecioItemCiudadDTOImpl.CIUDAD_REFERENCIA);
		strbuf.append(" = ");
		
		Reference<ItemDTO> refItem = precioItemCiudadDTOImpl.getItemDTORef();
	    refItem.checkInsert();
	    strbuf.append(refItem.getIdAsString());

		return strbuf.toString();
		
	}

	@Override
	protected IDTO internalResultSetToDTO(ResultSet rs, IDTO dto)
			throws Exception {
		
		PrecioItemCiudadDTOImpl ret = (PrecioItemCiudadDTOImpl) dto;
		
		ret.setId(rs.getInt(PrecioItemCiudadDTOImpl.ID));

		ret.setPrecio(rs.getInt(PrecioItemCiudadDTOImpl.PRECIO));

		Reference<CiudadDTO> refCiudad = ret.getCiudadDTORef();
	    refCiudad.setRefIdent(rs.getInt(PrecioItemCiudadDTO.CIUDAD_REFERENCIA));
	    refCiudad.setRefValue(null);
		
	    Reference<ItemDTO> refItem = ret.getItemDTORef();
	    refItem.setRefIdent(rs.getInt(PrecioItemCiudadDTO.ITEM_REFERENCIA));
	    refItem.setRefValue(null);
		
		return ret;	
	}

}
